- 该章节中所用到的表
# models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=15, verbose_name='书名')
price = models.IntegerField(verbose_name='价格')
publish = models.ForeignKey(to='Publish', verbose_name='出版社')
author = models.ManyToManyField(to='Author', verbose_name='作者')
def __str__(self):
return self.title
class Meta:
verbose_name = "书籍"
verbose_name_plural = verbose_name
class Publish(models.Model):
title = models.CharField(max_length=15)
def __str__(self):
return self.title
class Meta:
verbose_name = '出版社'
verbose_name_plural = verbose_name
class Author(models.Model):
name = models.CharField(max_length=15)
def __str__(self):
return self.name
class Meta:
verbose_name = '作者'
verbose_name_plural = verbose_name
- ._meta.app_label -> 获取该表类所在app的app名称
app_label = Book._meta.app_label
print(app_label) # app01
- ._meta.model_name -> 获取该表类所对应的表名(字符串类型)
model_name = Book._meta.model_name
print(model_name) # book
- ._meta.get_field('字段名') -> 获取该类内指定字段对象(即: 该字段类所实例化出来的对象)
field_obj = Book._meta.get_field('title')
print(type(field_obj)) # <class 'django.db.models.fields.CharField'>
- 使用实例
# 获取 title 字段中 verbose_name 属性的值
# 注意: 如果没有设置 verbose_name,那么默认返回该字段属性名
verbose_name = Book._meta.get_field('title').verbose_name
print(verbose_name) # 书名 (如果没有设置 verbose_name 就会返回 title)
# 获取 title 字段中 max_length 属性的值
max_length = Book._meta.get_field('title').max_length
print(max_length) # 15
- ._meta.fields -> 获取该表类内所有字段对象(即: 该表类中所有字段类所实例化出来的对象)
fields = Book._meta.fields
print(fields) # (<django.db.models.fields.AutoField: id>, <django.db.models.fields.CharField: title>, <django.db.models.fields.IntegerField: price>, <django.db.models.fields.related.ForeignKey: publish>)
- 使用实例
# 获取下标为1的字段对象中 verbose_name 属性的值
# 注意: 如果没有设置 verbose_name,那么默认返回该字段属性名
fields_list = Book._meta.fields
verbose_name = fields_list[1].verbose_name
# 等同于
verbose_name = Book._meta.fields[1].verbose_name
print(verbose_name) # 书名 (如果没有设置 verbose_name 就会返回 title)
# 获取下标为1的字段对象中 max_length 属性的值
fields_list = Book._meta.fields
max_length = fields_list[1].max_length
# 等同于
max_length = Book._meta.fields[1].max_length
print(max_length) # 15
- ._meta.get_fields() -> 获取该表类内所有字段对象(即: 该表类中所有字段类所实例化出来的对象),包含反向关联字段
fields = Book._meta.get_fields()
print(fields) # (<django.db.models.fields.AutoField: id>, <django.db.models.fields.CharField: title>, <django.db.models.fields.IntegerField: price>, <django.db.models.fields.related.ForeignKey: publish>, <django.db.models.fields.related.ManyToManyField: author>)
- 使用实例
# 获取多对多字段对象中 verbose_name 属性的值
# 注意: 如果没有设置 verbose_name,那么默认返回该字段属性名
fields = Book._meta.get_fields()
verbose_name = fields[4].verbose_name
# 等同于
verbose_name = Book._meta.get_fields()[4].verbose_name
print(verbose_name) # 书名 (如果没有设置 verbose_name 就会返回 title)
# 获取下标为1的字段对象中 max_length 属性的值
fields = Book._meta.get_fields()
max_length = fields[1].max_length
# 等同于
max_length = Book._meta.get_fields()[1].max_length
print(max_length) # 15
- ._meta.many_to_many -> 获取该表类内所有多对多字段对象(即: 该表类中所有多对多字段类所实例化出来的对象)
many_to_many_list = Book._meta.many_to_many
print(many_to_many_list) # (<django.db.models.fields.related.ManyToManyField: author>,)
- 使用实例
# 获取下标为0的字段对象中 verbose_name 属性的值
# 注意: 如果没有设置 verbose_name,那么默认返回该字段属性名
many_to_many_list = Book._meta.many_to_many
verbose_name = many_to_many_list[0].verbose_name
# 等同于
verbose_name = Book._meta.many_to_many[0].verbose_name
print(verbose_name) # 书名 (如果没有设置 verbose_name 就会返回 title)